////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modsagenv1.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MODSAGENV1_H
#define MODSAGENV1_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "awbglobalelements.h"

#define MODSAGENV1_NAMESPACE_BEGIN namespace modsagenv1 {
#define MODSAGENV1_NAMESPACE_END }

MODSAGENV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixSAGenV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixSAGenV1Type
{
    CHAR*                    Description;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// moduleID
    ///
    /// Tuning Level:  never_tune
    /// Description:   Define module ID, sub module ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::moduleIDType             moduleID;
    awbglobalelements::enableFlagType           enableFlag;
    FLOAT                    weight;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// detectionZone - Array
    ///
    /// Tuning Level:  must_tune
    /// Description:   Detection zone setting
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   detectionZoneCount;
    UINT32                   detectionZoneID;
    awbglobalelements::awbZoneDefineType*       detectionZone;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// configenceCmpt
    ///
    /// Tuning Level:  must_tune
    /// Description:   Final confidence level computation type
    /// Default Value: SAConfidenceMultiply
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbSAConfidenceCmptType  configenceCmpt;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// confidenceLevel - Array
    ///
    /// Tuning Level:  must_tune
    /// Description:   Confidence level setting
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                   confidenceLevelCount;
    UINT32                   confidenceLevelID;
    awbglobalelements::awbSAConfidenceDataType* confidenceLevel;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// targetAdjustment
    ///
    /// Tuning Level:  must_tune
    /// Description:   Target point setting
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    awbglobalelements::awbSATargetDataType      targetAdjustment;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixSAGenV1ArrayType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixSAGenV1ArrayType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SAGenV1Data - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                SAGenV1DataCount;
    UINT32                SAGenV1DataID;
    chromatixSAGenV1Type* SAGenV1Data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixSAGenV1ArrayTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixSAGenV1ArrayTypeClass : public ParameterModule, public chromatixSAGenV1ArrayType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixSAGenV1ArrayTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixSAGenV1ArrayTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixSAGenV1ArrayTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixSAGenV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixSAGenV1Type(
        ParameterFileSymbolTableEntry* entry,
        chromatixSAGenV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixSAGenV1ArrayType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixSAGenV1ArrayType(
        ParameterFileSymbolTableEntry* entry,
        chromatixSAGenV1ArrayType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixSAGenV1ArrayType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixSAGenV1Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixSAGenV1Type(
        chromatixSAGenV1Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixSAGenV1ArrayType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixSAGenV1ArrayType(
        chromatixSAGenV1ArrayType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixSAGenV1ArrayTypeClass

MODSAGENV1_NAMESPACE_END
#endif // MODSAGENV1_H

